
#pragma once

#include "iostream"
#include "vector"
#include "algorithm"
#include "TypeDefin.h"
using namespace std;
/*HJJ QQ479287006
 *给你一个链表的头节点 head ，判断链表中是否有环。

如果链表中有某个节点，可以通过连续跟踪 next 指针再次到达，则链表中存在环。 为了表示给定链表中的环，评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置（索引从 0 开始）。注意：pos 不作为参数进行传递 。仅仅是为了标识链表的实际情况。

如果链表中存在环 ，则返回 true 。 否则，返回 false

来源：力扣（LeetCode）
链接：https://leetcode.cn/problems/linked-list-cycle
著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 输入：head = [3,2,0,-4], pos = 1
输出：true
解释：链表中有一个环，其尾部连接到第二个节点。
 输入：head = [1,2], pos = 0
输出：true
解释：链表中有一个环，其尾部连接到第一个节点。
 * */
//TODO 是否有环 1. 是否有环 2. 找出环的入口 3. 环中节点个数
//  hasCycle
//  hasCycle --->
bool hasCycle(ListNode *head) {
    if (head== nullptr)
        return false;
    if (head->next== nullptr)
        return false;

    ListNode* nextNode=head->next->next;


    while (head!= nullptr&& nextNode!= nullptr){
        if (head==nextNode){
            return true;
        }
        head=head->next;

        if (nextNode->next){
            nextNode=nextNode->next->next;
        } else{
            break;
        }

    }

    return false;
}
